# @Time : 2020/7/30 14:12
# @Author : Fioman 
# @Phone : 13149920693
import cv2 as cv
import numpy as np

"""
在计算轮廓的时候,可能并不需要实际的轮廓,而仅仅是需要一个接近于轮廓的近似多边形.Opencv提供了多种计算轮廓近似多边形的方法.
1> 矩形包围框
cv.boundingRect() 能够绘制轮廓的矩形边界.
retval = cv.boundingRect(array)
返回值retval表示返回的矩形边界的左上角顶点的坐标值以及矩形边界的宽度和高度.
参数array是灰度图像或者轮廓.
x,y,w,h = cv.boundingRect(array)
x: 矩形边界左上角顶点的x坐标
y: 矩形边界左上角顶点的y坐标
w: 矩形边界的x方向的长度
h: 矩形边界的y方向的长度
画的是一个正矩形,不带角度旋转的矩形.
"""
img = cv.imread("cc.bmp")
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

T,thres = cv.threshold(gray,127,255,cv.THRESH_BINARY)
print("T = {}".format(T))
cv.imshow("Thres",thres)

image,contours,hierarchy = cv.findContours(thres,cv.RETR_LIST,cv.CHAIN_APPROX_SIMPLE)
x,y,w,h = cv.boundingRect(contours[0])
print("顶点以及长宽的形式:")
print("x = {}".format(x))
print("y = {}".format(y))
print("w = {}".format(w))
print("h = {}".format(h))

# 仅仅只有一个返回值的情况
rect = cv.boundingRect(contours[0])
print("顶点以及长宽的元组(tunple形式): {}".format(rect))

cv.waitKey(0)

rectPoints = np.array([[x,y],[x+w,y],[x+w,y+h],[x,y+h]])
cv.drawContours(img,[rectPoints],-1,(0,255,0),2)

cv.imshow("BoundingRect",img)
cv.waitKey(0)
cv.destroyAllWindows()







